WPF 任意事件绑定 |
您所在的位置:网站首页 › event click button wpf › WPF 任意事件绑定 |
任意事件绑定到Command的集中方法 1.InvokCommandAction 在NuGet中添加 System.Windows.Interactivity.WPF 在Xaml中添加引用 xmlns:i="http://schemas.microsoft.com/expression/2010/interactions" xmlns:ii="http://schemas.microsoft.com/expression/2010/interactivity"使用InvokCommandAction,能传递控件本身,但没有EventArgs e参数 EventName是想触发的事件名 InvokCommandAction中的 Command绑定的命令,需要写在ViewModel或者Model中,必须是一个继承自ICommand接口的类的实例 2.使用CallMethodAction,可以传递参数 ViewModel中: 把原来写在MainWindow.cs中的事件挪到vm中,需要把事件的访问权限改成public,默认是private的 InvokeCommandAtion和CallMethodAction的区别? InvokeCommandAtion:单纯的是用Command进行触发,并且VM中需要声明ICommand方法 CallMethodAction,其实是反射的方法,targetObject的binding是直接绑定DataContext,程序在执行时从DataContext中寻找MethodName的方法体,不需要写命令 在使用 System.Windows.Interactivity.WPF时,会提示让使用Microsoft.Xaml.Behaviors.Wpf 在xaml中删除System.Windows.Interactivity.WPF的引用 添加对Microsoft.Xaml.Behaviors.Wpf的引用 xmlns:i="http://schemas.microsoft.com/xaml/behaviors"InvokeCommandAtion和CallMethodAction都在这一个命名空间中 3.EventToCommand 上面2中情况是在不使用mvvmlight情况下, 在mvvmlight下,可以使用EventToCommand,在命名空间下: xmlns:cmd="http://www.galasoft.ch/mvvmlight"还需要使用 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"不能使用 xmlns:i="http://schemas.microsoft.com/xaml/behaviors"xaml中: PassE ventArgstoCommand="true"决定是否传递参数 VewModel或者Model中定义一个命令 public class MYViewModel { public ICommand testcmd { get; set; } public ICommand testcmd2 { get; set; } public MYViewModel() { testcmd = new RelayCommand(new Action(ButtonClick)) ; testcmd2 =new RelayCommand(new Action(ButtonClick2)) ; } private void ButtonClick2(EventArgs obj) { } private void ButtonClick() { } }testcmd不带参数。testcmd2带参数 obj就是EventArgs 在这里插入图片描述 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |